Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_announce_dao_trim.py

Displaying Raw • Download


tests/backend/test_announce_dao_trim.py dev (af76f09d) Text, 5.33 KB

T8b949e# SPDX-License-Identifier: 0BSD

Tff7b72import T7ee787os
Tff7b72import T7ee787tempfile

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787provider Tff7b72import Te6edf3DatabaseProvider


Tff7b72def Td2a8ff_insertTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3dest_hexTb4b4b4, Te6edf3aspectTb4b4b4, Te6edf3updated_orderTb4b4b4, Te6edf3identity_hexTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_announceTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hexTb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff"Tb4b4b4: Te6edf3identity_hex Tff7b72or Tb4b4b4(Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcHVibmtleQ==Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffqualityTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffproviderTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffUPDATE announces SET updated_at = ? WHERE destination_hash = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3updated_orderTb4b4b4, Te6edf3dest_hexTb4b4b4)Tb4b4b4,
Tb4b4b4)


Tff7b72def Td2a8ff_new_dbTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffNamedTemporaryFileTb4b4b4(Te6edf3suffixTff7b72=Ta5d6ff"Ta5d6ff.dbTa5d6ff"Tb4b4b4, Te6edf3deleteTff7b72=Tff7b72FalseTb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3path Tff7b72= Te6edf3fTff7b72.Td2a8ffname
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3dbTb4b4b4, Te6edf3path


Tff7b72def Td2a8ff_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3db Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Tff7b72if Te6edf3pathTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72pass
Tff7b72for Te6edf3suffix Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ff-walTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-shmTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3path Tff7b72+ Te6edf3suffixTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72pass


Tff7b72def Td2a8fftest_trim_announces_for_aspect_noop_when_max_rows_below_oneTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Te6edf3path Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3dbTb4b4b4, Te6edf3path Tff7b72= Te6edf3_new_dbTb4b4b4(Tb4b4b4)
Te6edf3aspect Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-01T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-02T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Te6edf3aspectTb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72assert Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announce_count_by_aspectTb4b4b4(Te6edf3aspectTb4b4b4) Tff7b72== T79c0ff2
Tff7b72finallyTb4b4b4:
Te6edf3_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)


Tff7b72def Td2a8fftest_trim_announces_for_aspect_drops_oldestTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Te6edf3path Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3dbTb4b4b4, Te6edf3path Tff7b72= Te6edf3_new_dbTb4b4b4(Tb4b4b4)
Te6edf3aspect Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-01T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-02T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-03T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Te6edf3aspectTb4b4b4, T79c0ff2Tb4b4b4)
Te6edf3rows Tff7b72= Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Te6edf3aspectTb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4{Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4}
Tff7b72assert Te6edf3hashes Tff7b72== Tb4b4b4{Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4}
Tff7b72finallyTb4b4b4:
Te6edf3_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)


Tff7b72def Td2a8fftest_trim_preserves_favourited_destinationTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Favourited NomadNet/destination announces must survive aspect trim."""
Te6edf3db Tff7b72= Te6edf3path Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3dbTb4b4b4, Te6edf3path Tff7b72= Te6edf3_new_dbTb4b4b4(Tb4b4b4)
Te6edf3aspect Tff7b72= Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"

Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-01T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-02T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-03T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-04T00:00:00ZTa5d6ff"Tb4b4b4)

Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffupsert_favouriteTb4b4b4(Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Ta5d6ff"Ta5d6ffFavourite NodeTa5d6ff"Tb4b4b4, Te6edf3aspectTb4b4b4)

Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Te6edf3aspectTb4b4b4, T79c0ff2Tb4b4b4)

Te6edf3rows Tff7b72= Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Te6edf3aspectTb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4{Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4}

Tff7b72assert Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72in Te6edf3hashesTb4b4b4, Ta5d6ff"Ta5d6fffavourited announce was wrongly trimmedTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72in Te6edf3hashesTb4b4b4, Ta5d6ff"Ta5d6ffnewest announce should be retainedTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72not Tff7b72in Te6edf3hashes
Tff7b72assert Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72not Tff7b72in Te6edf3hashes
Tff7b72finallyTb4b4b4:
Te6edf3_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)


Tff7b72def Td2a8fftest_trim_preserves_contact_announce_by_identity_hashTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Announces tied to a saved contact via identity hash must not be dropped."""
Te6edf3db Tff7b72= Te6edf3path Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3dbTb4b4b4, Te6edf3path Tff7b72= Te6edf3_new_dbTb4b4b4(Tb4b4b4)
Te6edf3aspect Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"

Te6edf3contact_identity Tff7b72= Ta5d6ff"Ta5d6ffbTa5d6ff" Tff7b72* T79c0ff32

Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-01T00:00:00ZTa5d6ff"Tb4b4b4, Te6edf3contact_identityTb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-02T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-03T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-04T00:00:00ZTa5d6ff"Tb4b4b4)

Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffFriendTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3contact_identityTb4b4b4,
Tb4b4b4)

Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Te6edf3aspectTb4b4b4, T79c0ff2Tb4b4b4)

Te6edf3rows Tff7b72= Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Te6edf3aspectTb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4{Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4}

Tff7b72assert Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72in Te6edf3hashesTb4b4b4, Ta5d6ff"Ta5d6ffcontact-linked announce was wrongly trimmedTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72in Te6edf3hashes
Tff7b72finallyTb4b4b4:
Te6edf3_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)


Tff7b72def Td2a8fftest_trim_preserves_contact_announce_by_lxmf_addressTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Announces matching contacts.lxmf_address must be retained."""
Te6edf3db Tff7b72= Te6edf3path Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3dbTb4b4b4, Te6edf3path Tff7b72= Te6edf3_new_dbTb4b4b4(Tb4b4b4)
Te6edf3aspect Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"

Te6edf3protected_dest Tff7b72= Ta5d6ff"Ta5d6ff01Ta5d6ff" Tff7b72* T79c0ff16

Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3protected_destTb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-01T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff02Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-02T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff03Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-03T00:00:00ZTa5d6ff"Tb4b4b4)
Te6edf3_insertTb4b4b4(Te6edf3dbTb4b4b4, Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4, Te6edf3aspectTb4b4b4, Ta5d6ff"Ta5d6ff2000-01-04T00:00:00ZTa5d6ff"Tb4b4b4)

Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffFriendTa5d6ff"Tb4b4b4,
Te6edf3remote_identity_hashTff7b72=Ta5d6ff"Ta5d6ffcTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4,
Te6edf3lxmf_addressTff7b72=Te6edf3protected_destTb4b4b4,
Tb4b4b4)

Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8fftrim_announces_for_aspectTb4b4b4(Te6edf3aspectTb4b4b4, T79c0ff2Tb4b4b4)

Te6edf3rows Tff7b72= Te6edf3dbTff7b72.Td2a8ffannouncesTff7b72.Td2a8ffget_announcesTb4b4b4(Te6edf3aspectTff7b72=Te6edf3aspectTb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4{Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3rowsTb4b4b4}

Tff7b72assert Te6edf3protected_dest Tff7b72in Te6edf3hashes
Tff7b72assert Ta5d6ff"Ta5d6ff04Ta5d6ff" Tff7b72* T79c0ff16 Tff7b72in Te6edf3hashes
Tff7b72finallyTb4b4b4:
Te6edf3_cleanupTb4b4b4(Te6edf3dbTb4b4b4, Te6edf3pathTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────